package com.example.guardian.home;

import android.os.Build;
import android.util.Log;

import androidx.annotation.RequiresApi;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


public class GetTopN {

    @RequiresApi(api = Build.VERSION_CODES.N)
    public static List topNFrequent(List words_lst, int n) {
        Map<String,Integer> map=new HashMap<>();
        for (int c = 0; c < words_lst.size(); c++){
            String word = words_lst.get(c).toString();
            Integer count=map.getOrDefault(word,0);
            count++;
            map.put(word,count);
        }
        List<Map.Entry<String,Integer>> res = new ArrayList<>(map.entrySet());
        // Lambda表达式写法
        Collections.sort(res,(m1, m2)->m2.getValue().compareTo(m1.getValue()));
        // 传统写法
//        Collections.sort(res,new Comparator<Map.Entry<String,Integer>>() {
//            @Override
//            public int compare(Map.Entry<String,Integer> m1, Map.Entry<String,Integer> m2) {
//                return m2.getValue()-m1.getValue();
//            }
//        });
        List lst = new ArrayList();
        for(int i=0;i<n;i++){
            lst.add(res.get(i).getKey());
            Log.e("pic_1", "key:"+res.get(i).getKey()+" value:"+res.get(i).getValue());
        }
        return lst;
    }
    @RequiresApi(api = Build.VERSION_CODES.N)
    public static List topNFrequent_kind(List words_lst, int n) {
        Map<String,Integer> map=new HashMap<>();
        for (int c = 0; c < words_lst.size(); c++){
            ArrayList<String> a = (ArrayList<String>)words_lst.get(c);
            String word = words_lst.get(0).toString();
            Integer count=map.getOrDefault(word,0);
            count++;
            map.put(word,count);
        }
        List<Map.Entry<String,Integer>> res = new ArrayList<>(map.entrySet());
        // Lambda表达式写法
        Collections.sort(res,(m1, m2)->m2.getValue().compareTo(m1.getValue()));
        // 传统写法
//        Collections.sort(res,new Comparator<Map.Entry<String,Integer>>() {
//            @Override
//            public int compare(Map.Entry<String,Integer> m1, Map.Entry<String,Integer> m2) {
//                return m2.getValue()-m1.getValue();
//            }
//        });
        List lst = new ArrayList();
        for(int i=0;i<n;i++){
            lst.add(res.get(i).getKey());
            Log.e("pic_1", "key:"+res.get(i).getKey()+" value:"+res.get(i).getValue());
        }
        return lst;
    }
}
